'use strict';
const {
	appId,
	appSecret,
	getToken
} = require("wx-common");
exports.main = async (event, context) => {
	
	//在微信小程序官网中输入jscode2session可以查
	//拿到用户凭证
	const {
		code
	} = event;
	//根据传过来的code去微信小程序的地址中获取用户的唯一标识openid
	const res = await uniCloud.httpclient.request(
		"https://api.weixin.qq.com/sns/jscode2session?appid=" + appId + "&secret=" + appSecret +
		"&js_code=" + code + "&grant_type=authorization_code", {
			dataType: "json" //返回的数据类型为json形式
		}
	)
	//接收返回结果的openid
	const openid = res.data.openid;
	
	//拿到openid之后把它传进去加密，可拿到返回的加密数据，相当于token
	const token = getToken(openid);
	
	
	//初始化一个数据库
	const db = uniCloud.database();
	
	//根据openid来初始化一个数据表字段
	//初始化之前先查一下数据库中有没有这个账户，如果有那就不初始化了
	let dbRes = await db.collection("users").where({
		openid:openid
	}).get();
	
	let userData;
	if(dbRes.affectedDocs <= 0){//值为1说明有一条符合，值为<=0说明不存在这个用户表段，初始化进去
		userData = {
			openid: openid//初始化存到数据库的肯定是原始的ipenid
		}
		//将用户信息传到云数据库中
		await db.collection("users").add(userData)
	}else{//存在这个用户，把数据拿出来,它是比初始化的属性多的，因为之前有过授权，所以里面会存在有原始的openid
		userData = dbRes.data[0];
	}
	
	//存在这个用户，把数据拿出来之后把对象里的openid删了，不返回
	delete userData["openid"];
	//把加密后的token写到对象里面返回给前台，而不是直接把原始值返回
	userData["token"]=token;

	//将数据返回给客户端,这里返回给前端的，要么是刚开始初始化的，要么是授权过的
	//如果是前者，那么需要在前端进行授权得到，如果是后者，那么不需要授权了
	return userData
};
